/*
* created by Administrator on 2018/11/30
* 好的代码像粥一样,是得用时间和精力熬的。
*/
// const Mock = require('mockjs');
const crypto = require('crypto');
const models = require('../database/model');
const querystring = require('querystring');
const request = require('request');
const Router = require('koa-router');
const router = new Router();
router.get('/landing', async (ctx, next) => {
    let {value} = ctx.request.query;
    console.log(value);
    if (value && /^1[35789]\d{9}$/.test(value)) {
        function random() {
            return parseInt(Math.random() * 1000000) + '';
        }
        let code = random();
        // console.log(code);
        ctx.session.user = {
            tell: value,
            code
        };
        console.log(ctx.session.user);
        let querydata = querystring.stringify({
            mobile: value,
            tpl_id: 117434,
            tpl_value: '#code#='+code,
            key: 'c686143464757f4a5f6d2d7b933b7bda'
        });
        let url = `http://v.juhe.cn/sms/send?${querydata}`;
        let ajax = async (url) => {
            return new Promise((resolve, reject) => {
                request(url, (error, res, body) => {
                    let code = JSON.parse(body);
                    if (code.error_code === 0) {
                        resolve(code)
                    } else {
                        reject(code)
                    }
                })
            })
        };
        await ajax(url).then(() => {
            ctx.body = {
                code: 1,
                msg: `验证码已经发送到+86 ${value}`
            }
        }).catch(() => {
            ctx.body = {
                code: -1,
                msg: '发送失败！',
            }
        })
    } else {
        ctx.body = {
            code: -1,
            msg: `${value}是正确的手机号码吗？`
        }
    }
    await next();
});

router.get('/page', async (ctx, next) => {
    let {numCode} = ctx.request.query;
    console.log(numCode);
    if (ctx.session.user) {
        let code = ctx.session.user.code;
        if (numCode === code) {
            ctx.body = {
                code: 1,
                msg: '登录成功！'
            }
        } else {
            ctx.body = {
                code: -1,
                msg: '验证码错误咯!',
            }
        }
    } else {
        ctx.body = {
            code: -1,
            msg: '请先输入手机号码！'
        }
    }
    await next()
});

router.post('/translate', async (ctx,next) => {
    let {value} = ctx.request.body;
    const salt = (() => {return Math.floor(Math.random()*10000000) + '';})();
    const APPID = '20181206000244645';
    const keygen = 'M5VIyfjCPcvX8CrxvqxG';
    const query = value;
    const md5 = str => crypto.createHash('md5').update(str).digest('hex');
    let sign = md5(APPID + query + salt + keygen);
    let querydata = querystring.stringify({
        q: value,
        from: 'auto',
        to: 'en',
        appid: APPID,
        salt: salt,
        sign
    });
    let url = `http://api.fanyi.baidu.com/api/trans/vip/translate?${querydata}`;
    let english = '';
    let ajax = async (url) => {
        return new Promise((resolve, reject) => {
            request(url, (error, res, body) => {
                let code = JSON.parse(body);
                if (code) {
                    resolve(code)
                } else {
                    reject(code)
                }
            })
        })
    };

    await ajax(url)
        .then(data => {
            console.log(data);
            english = data.trans_result[0].dst;
            console.log(english);
            ctx.body = {
                code: 1,
                msg: '翻译成功！',
                data
            };
        })
        .catch(error => {
            console.log(error);
            ctx.body = {
                code: -1,
                msg: '翻译失败！',
                error
            }
        });
    let userData = [{
        username: ctx.session.user.tell,
        code: ctx.session.user.code,
        content: value,
        english
    }];

    await models.Translate.insertMany(userData[0])
        .then(data => {
            console.log(data);
            ctx.body = {
                code: 1,
                msg: '写入数据库成功！',
                data
            }
        })
        .catch(error => {
            console.log(error);
            ctx.body = {
                code: -1,
                msg: '写入数据库失败！',
                error
            }
        });

    // await models.Translate.find({username: 18772510073})
    //     .then(data => {
    //         ctx.body = {
    //             code: 1,
    //             msg: '查询成功！',
    //             data
    //         }
    //     })
    //     .catch(error => {
    //         ctx.body = {
    //             code: -1,
    //             msg: '查询失败！',
    //             error
    //         }
    //     });
    await next();
});

// router.get('/reg', async (ctx, next) => {
//     let { username, password, phoneNumber} = ctx.request.query;
//     if (username && password && phoneNumber) {
//         models.User.create({ username, password, phoneNumber})
//             .then(data => {
//                 ctx.body = {
//                     code: 1,
//                     msg: '注册成功！',
//                     data
//                 }
//             })
//             .catch(error => {
//                 ctx.body = {
//                     code: -1,
//                     msg: '注册失败！',
//                     error
//                 }
//             })
//     } else {
//         ctx.body = {
//             code: -1,
//             msg: '数据不合格！',
//         }
//     }
//     await next();
// });

// router.get('/repeat', async (ctx,next) => {
//     Mock.mock({
//         'data|10000':[{
//             username:'@cname',
//             gender:'@boolean',
//             age:'@integer(16,50)',
//             phoneNumber:/^1[35789]\d{9}$/,
//             city: '@city',
//             password: /^[A-Z]\w{9,15}/
//         }]
//     }).data.forEach(async (v) => {
//         await models.User.create(v) // 将数据添加到数据库
//             .then(data => {
//                 console.log(data);
//             })
//             .catch(error => {
//                 console.log(error);
//             })
//     })
// });

router.get('/search', async (ctx,next) => {
    let {searchText} = ctx.request.query;
    searchText !== '' && await models.User.find({ // find()查询
        //匹配查询【匹配字段】
        $or: [
            { username: new RegExp(searchText) },
            { phoneNumber: new RegExp(searchText) },
            { city: new RegExp(searchText) },
        ]
    }).limit(100)
        .then(data => {
            console.log(data);
            ctx.body = {
                code: 1,
                msg: '搜索成功！',
                data,
            }
        })
        .catch(error => {
            console.log(error);
            ctx.body = {
                code: -1,
                msg: '搜索失败！',
                error,
            }
        });
    await next()
});

router.post('/article', async (ctx, next) => {
    // let {title,content,date,fav} = ctx.request.body;

    // let mockData = Mock.mock({
    //     'data|10': [{
    //         title: '@csentence(8,18)',
    //         content: '@cparagraph(100,500)',
    //         date: () => new Date().getTime(),
    //         author: '@guid',
    //         fav: '@integer(10,10000)',
    //     }]
    // }).data;


    // await models.Article.findByFav(8705)
    //     .then(data => {
    //         ctx.body = {
    //             data
    //         }
    //     })
    //     .catch(error => {
    //         ctx.body = {
    //             error
    //         }
    //     })

    // await new models.Article(mockData[0])
    //     .save()
    //     .then(data => {console.log(data);})
    //     .catch(error => {console.log(error);})

    // await models.Article.create(mockData)
    //     .then(data => {
    //         console.log(data);
    //         // ctx.body = {
    //         //     code: 1,
    //         //     msg: '文章保存成功！',
    //         //     data,
    //         // }
    //     })
    //     .catch(error => {
    //         console.log(error);
    //         // ctx.body = {
    //         //     code: -1,
    //         //     msg: '文章保存失败！',
    //         //     data: error
    //         // }
    //     })

    // await models.Article.insertMany(mockData)
    //     .then(data => {
    //         console.log(data);
    //         // ctx.body = {
    //         //     code: 1,
    //         //     msg: '文章保存成功！',
    //         //     data,
    //         // }
    //     })
    //     .catch(error => {
    //         console.log(error);
    //         // ctx.body = {
    //         //     code: -1,
    //         //     msg: '文章保存失败！',
    //         //     data: error
    //         // }
    //     });
    // await next()

    // await models.Article.find({
    //     //筛选数据
    //     fav: {$gte:1000,$lte: 2000,$ne: 1500},
    //     // date: {$in: ['1544002499200','1544002499211']}
    // }).select({title: 0,content: 0})
    //     .then(data => {
    //         ctx.body = {
    //                         code: 1,
    //                         data
    //                     }
    //     })
    //     .catch(error => {
    //         ctx.body = {
    //             code: -1,
    //             error
    //         }
    //     });
    // await next();

    // await models.Article.findByFav(11)
    //     .then(data => console.log(data))
    //     .catch(error => console.log(error));
    // await next()
  // await models.Article.find({
  //     author:'e3CDD41B-859B-D1ef-FDbD-Da29549Bfd29'
  // }).then(data => {
  //     ctx.body = {
  //         code: 1,
  //         data
  //     }
  // })
  //     .catch(error => console.log(error))

   // await models.Article.update({
   //         author: 'e3CDD41B-859B-D1ef-FDbD-Da29549Bfd29'},
   //     {fav: 100,title: '哈巴哈巴哈巴'},
   //     {multi: true}
   //     )
   //     .then(data => {
   //         ctx.body = {
   //             code: 1,
   //             data
   //         }
   //     })
   //     .catch(error => {
   //         ctx.body = {
   //             code: -1,
   //             error
   //         }
   //     })
   //     .catch(error => console.log(error))
});
module.exports = app => app.use(router.routes());
